# -*- coding: utf-8 -*-

import os
import sys
from flask import Flask, request, jsonify
from flask_cors import CORS
from werkzeug.exceptions import HTTPException

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from core.chatbot_graph import ChatBotGraph
from common.Result import Result

"""
问题示例：
1. 课程相关：
   - 离散结构的知识单元有哪些
   - 离散结构的简介
   - 离散结构的学时是多少
   - 离散结构的教学大纲
   - 离散结构的知识点有哪些
   - 离散结构属于什么专业
   - 离散结构有多少知识单元
   - 离散结构有多少知识点

2. 知识点相关：
   - 功能组织掌握程度
   - 功能组织重要程度
   - 递归的前置知识点
   - 递归的后继知识点
   - 递归的掌握程度
   - 递归的重要程度

3. 知识单元相关：
   - 程序设计基础的前置知识单元
   - 程序设计基础的后继知识单元
   - 建模基础涵盖哪些知识点
   - 建模基础属于什么课程

4. 课程关系相关：
   - 操作系统的先修课程有什么
   - 操作系统的后继课程
   - 操作系统的前置课程

注意：示例中的"离散结构"可以替换为其他课程名称
"""

# 初始化Flask应用
app = Flask(__name__)
CORS(app)  # 启用跨域支持

# 初始化问答系统
chatbot = ChatBotGraph()

@app.route('/', methods=['GET'])
def index():
    """服务状态检查接口"""
    return jsonify(Result.success("问答系统服务正常运行").to_dict())

@app.route('/api/chat', methods=['POST'])
def chat():
    """处理聊天请求"""
    try:
        data = request.get_json()
        if not data or 'question' not in data:
            return jsonify(Result.error("请提供问题").to_dict())
        
        question = data['question']
        if not question.strip():
            return jsonify(Result.error("问题不能为空").to_dict())
        
        # 获取答案
        answer = chatbot.chat_main(question)
        if not answer:
            return jsonify(Result.error("未能找到相关答案").to_dict())
            
        return jsonify(Result.success(answer).to_dict())
    
    except Exception as e:
        print(f"处理请求时出错: {str(e)}")
        return jsonify(Result.error(f"处理请求时出错: {str(e)}").to_dict())

@app.route('/api/health', methods=['GET'])
def health_check():
    """健康检查接口"""
    return jsonify(Result.success("服务正常运行").to_dict())

# 注册全局异常处理器
@app.errorhandler(Exception)
def handle_exception(e):
    print(f"发生错误: {str(e)}")
    # 区分 HTTP 异常和其他普通异常
    if isinstance(e, HTTPException):
        return jsonify(Result.error(f"HTTP错误: {e.description}").to_dict()), e.code
    else:
        # 返回自定义的错误信息，HTTP 状态码 500
        return jsonify(Result.error(f"服务器内部错误: {str(e)}").to_dict()), 500

if __name__ == '__main__':
    print("启动问答系统服务...")
    app.run(host='0.0.0.0', port=5000, debug=True) 